/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.viators.model;

import com.viators.beans.*;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.viators.actions.Utiles;
import java.io.Reader;
import java.util.*;
import org.apache.log4j.Logger;

/**
 *
 * @author mvalentin
 */
public class GestionConductor {

    private static final Logger logger = Logger.getLogger(GestionConductor.class);

    public Collection listarPais() {
        List<PaisBean> paises = new ArrayList<PaisBean>();
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            List<PaisBean> lista = sqlMap.queryForList("getPaises", null);
            for (int i = 0; i < lista.size(); i++) {
                PaisBean pais = new PaisBean();
                PaisBean pa = (PaisBean) lista.get(i);
                pais.setNpais_codigo(pa.getNpais_codigo());
                pais.setCpais_nombre(pa.getCpais_nombre().toUpperCase());
                paises.add(pais);
            }
        } catch (Exception ex) {
            System.out.println("--->" + ex.getMessage());
            ex.printStackTrace();
        } finally {
        }
        return paises;
    }

    /**
     * 
     * @param numRegion indica la region de la qcual se quiere mostrar
     *  2 = sudamerica )
     * 1 = resto del muundo
     * @return
     */
    public Collection listarPais(int npais_region) {
        List<PaisBean> paises = new ArrayList<PaisBean>();
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            List<PaisBean> lista = sqlMap.queryForList("getPaisesReg", npais_region);
            for (int i = 0; i < lista.size(); i++) {
                PaisBean pais = new PaisBean();
                PaisBean pa = (PaisBean) lista.get(i);
                pais.setNpais_codigo(pa.getNpais_codigo());
                pais.setCpais_nombre(pa.getCpais_nombre().toUpperCase());
                paises.add(pais);
            }
        } catch (Exception ex) {
            System.out.println("--->" + ex.getMessage());
            ex.printStackTrace();
        } finally {
        }
        return paises;
    }

    public Collection listarDocumentos() {
        List<DocumentoBean> documentos = new ArrayList<DocumentoBean>();
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            List<DocumentoBean> lista = sqlMap.queryForList("getDocumentos", null);
            for (int i = 0; i < lista.size(); i++) {
                DocumentoBean documento = new DocumentoBean();
                DocumentoBean doc = (DocumentoBean) lista.get(i);
                documento.setNtido_codigo(doc.getNtido_codigo());
                documento.setCtido_descripcion(doc.getCtido_descripcion().toUpperCase());
                documentos.add(documento);
            }
        } catch (Exception ex) {
            System.out.println("--->" + ex.getMessage());
            ex.printStackTrace();
        } finally {
        }
        return documentos;
    }

    public Collection listarEstados() {
        List<EstadoBean> estados = new ArrayList<EstadoBean>();
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            List<EstadoBean> lista = sqlMap.queryForList("getEstados", null);
            for (int i = 0; i < lista.size(); i++) {
                EstadoBean estado = new EstadoBean();
                EstadoBean es = (EstadoBean) lista.get(i);
                estado.setNesci_codigo(es.getNesci_codigo());
                estado.setCesci_descripcion(es.getCesci_descripcion().toUpperCase());
                estados.add(estado);
            }
        } catch (Exception ex) {
            System.out.println("--->" + ex.getMessage());
            ex.printStackTrace();
        } finally {
        }
        return estados;
    }

    public Collection listarOcupacion() {
        List<OcupacionBean> ocupaciones = new ArrayList<OcupacionBean>();
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            List<OcupacionBean> lista = sqlMap.queryForList("getOcupacion", null);
            for (int i = 0; i < lista.size(); i++) {
                OcupacionBean ocupacion = new OcupacionBean();
                OcupacionBean ocu = (OcupacionBean) lista.get(i);
                ocupacion.setNocup_codigo(ocu.getNocup_codigo());
                ocupacion.setCocup_descripcion(ocu.getCocup_descripcion().toUpperCase());
                ocupaciones.add(ocupacion);
            }
        } catch (Exception ex) {
            System.out.println("--->" + ex.getMessage());
            ex.printStackTrace();
        } finally {
        }
        return ocupaciones;
    }

    public boolean insertarConductor(Sisma_personaActionForm paf,String accion) {
        boolean flag = false;
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            Sisma_personaBean cb = new Sisma_personaBean();
            cb.setNpers_codigo(paf.getNpers_codigo());
            cb.setCpers_apepaterno(paf.getCpers_apepaterno().toUpperCase());
            cb.setCpers_apematerno(paf.getCpers_apematerno().toUpperCase());
            cb.setCpers_nombres(paf.getCpers_nombres().toUpperCase());
            cb.setNesci_codigo(paf.getNesci_codigo());
            cb.setCpers_ocupacion(paf.getCpers_ocupacion().toUpperCase());
            cb.setNpais_codigo(paf.getNpais_codigo());
            String fe = "";
            try {
                fe = paf.getDpers_fechanacimientoconductor();
                fe = Utiles.dateToString( Utiles.stringToDate(fe, "yyyy-MM-dd"), "dd/MM/yyyy");
            } catch (Exception e) {
                logger.error (e.getMessage() ) ;
                logger.debug( "la fecha se ha pasado sin alterar = " + fe);
            }
            cb.setDpers_fechanacimientoconductor( fe );
            
            if(accion.equals("nuevo")){
                logger.debug("dao insert persona");
                sqlMap.insert("insertarConductor", cb);
            }else{
                logger.debug("dao update persona");
                try {
                    String f = Utiles.dateToString( Utiles.stringToDate( cb.getDpers_fechanacimientoconductor()  , "yyyy-MM-dd"), "dd/MM/yyyy");
                    cb.setDpers_fechanacimientoconductor( f );
                } catch (Exception e) {
                      logger.error("Error en parse de fecha de nacimiento de pasajero");
                }
                sqlMap.update("modificarConductor", cb);
            }
            flag = true;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
        }
        return flag;
    }

    public int generarCodigoConductor() {
        int codigo = 0;
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            Sisma_personaBean persona = (Sisma_personaBean) sqlMap.queryForObject("getMaxConductor", null);
            codigo = persona.getNpers_codigo();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
        }
        return codigo;
    }

    public boolean insertarNroDoc(Sisma_personaActionForm paf,String accion) {
        boolean flag = false;
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            NroDocumentoBean cb = new NroDocumentoBean();
            cb.setNpers_codigo(paf.getNpers_codigo());
            cb.setNtido_codigo(paf.getNtido_codigo());
            cb.setCdope_numero(paf.getCdope_numero());
            if(accion.equals("nuevo")){
                sqlMap.insert("insertarNroDocumento", cb);
            }else{
                sqlMap.insert("updateNroDocumento", cb);
            }
            flag = true;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
        }
        return flag;
    }

    public int generarMaximoLista() {
        int codigo = 0;
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            Sisma_listapasajerosBean list = (Sisma_listapasajerosBean) sqlMap.queryForObject("getMaxLista", null);
            codigo = list.getNlipa_codigo();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
        }
        return codigo;
    }

    public Sisma_listapasajerosBean generarIdNuevo() {
        int codigo = 0;
        int novenoCaracter = 0;
        int decimoCaracter =0;
        int valorfinal= 0;
        boolean flag=false;
        int id = 0;
        String nuevocodigo="";
        Sisma_listapasajerosBean lpb = new Sisma_listapasajerosBean();
        try {
            String resource = "com/viators/xml/Conexion.xml";
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
            Sisma_listapasajerosBean listapasajeros = (Sisma_listapasajerosBean) sqlMap.queryForObject("getNewIdListaPasajeros", null);
            System.out.println(listapasajeros.getNlipa_codigo());
            codigo = listapasajeros.getNlipa_codigo();
            novenoCaracter = modulo(codigo,11);
            String noveno = String.valueOf(novenoCaracter);
            if (noveno.length()>1){
                novenoCaracter = Integer.parseInt(noveno.substring(noveno.length() - 1));
            }
            decimoCaracter = modulo(Integer.parseInt(String.valueOf(codigo).trim()+String.valueOf(novenoCaracter).trim()),11);
            String decimo = String.valueOf(decimoCaracter);
            if (decimo.length()>1){
                decimoCaracter = Integer.parseInt(decimo.substring(decimo.length()-1));
            }
            valorfinal = Integer.parseInt(String.valueOf(codigo).trim()+String.valueOf(novenoCaracter).trim()+String.valueOf(decimoCaracter).trim());
            nuevocodigo = padL(String.valueOf(valorfinal), 10, '0');
            id = generarMaximoLista()+1;
            lpb.setNlipa_codigo(id);
            lpb.setNlipa_numeroautogenerado(codigo);
            lpb.setClipa_autogenerado(nuevocodigo);
            sqlMap.insert("insertarNuevaListaPasajeros", lpb);
            flag = true;
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
        }
        return lpb;
    }

    public static String padL(String entrada, int lon, char ca) {
        String salida = entrada.trim();
        for (int i = salida.length(); i < lon; i++) {
            salida = String.valueOf(ca) + salida;
        }
        return salida;
    }
    
    public static int modulo(int numero,int modulo){
        int resto = numero % modulo;
        return resto;
    }
}
